package sifeap.pl.managedbean.solicitudesauxilio;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.SelectItem;

import sifeap.bl.ejb.solicitudesauxilio.SolicitudAuxilioBLLocal;
import sifeap.entities.solicitudesauxilio.EstadoAuxilio;
import sifeap.entities.solicitudesauxilio.SolicitudAuxilio;
import sifeap.entities.solicitudesauxilio.valueobject.SolicitudAuxilioVO;
import sifeap.entities.usuarios.valueobject.UsuarioVO;
import sifeap.exception.SifeapException;
import sifeap.pl.managedbean.usuarios.LoginManagedBean;
import sifeap.pl.managedbean.usuarios.MenuUsuarioManagedBean;
import sifeap.pl.util.FacesUtils;

@ManagedBean(name="misSolicitudesAuxilioManagedBean")
@SessionScoped
public class MisSolicitudesAuxilioManagedBean {
	private SolicitudAuxilioVO solicitudAuxilioVo;
	private List<SolicitudAuxilio> listaSolicitudes;
	
	private SolicitudAuxilio solicitudAuxilioSeleccionada;
	
	private int accion;
	
	private final String MENSAJES_BUNDLE = "sifeap.pl.bundles.mensajes";
	
	@EJB
	SolicitudAuxilioBLLocal solicitudAuxilioBL;
	
	@PostConstruct
	public void inicializar() {
		//Se inicializan los datos
		cargarDatosPredeterminados();
		buscar();
	}
	
	public List<SelectItem> getItemsEstadosAuxilio() {
		List<EstadoAuxilio> listaEstadoAuxilio = null;
		try {
			listaEstadoAuxilio = solicitudAuxilioBL.buscarEstadosAuxilio();
		} catch (SifeapException e) {
			e.printStackTrace();
		}
		
		List <SelectItem> itemsEstadosAuxilio = new ArrayList<SelectItem>();
		if (listaEstadoAuxilio != null) {
			for (EstadoAuxilio estadoAuxilio : listaEstadoAuxilio) {
				itemsEstadosAuxilio.add(new SelectItem(estadoAuxilio.getIdEstadoAuxilio(), estadoAuxilio.getNombre()));
			}
		}
		return itemsEstadosAuxilio;
	}
	
	public Boolean getMostrarResultados() {
		if (listaSolicitudes != null && listaSolicitudes.size() > 0) {
			return true;
		} else {
			return false;
		}
	}
	
	public List<SolicitudAuxilio> getListaSolicitudes() {
		return listaSolicitudes;
	}
	
	public void setListaSolicitudes(List<SolicitudAuxilio> listaSolicitudes) {
		this.listaSolicitudes = listaSolicitudes;
	}

	public SolicitudAuxilioVO getSolicitudAuxilioVo() {
		return solicitudAuxilioVo;
	}

	public void setSolicitudAuxilioVo(SolicitudAuxilioVO solicitudAuxilioVo) {
		this.solicitudAuxilioVo = solicitudAuxilioVo;
	}
	
	public SolicitudAuxilio getSolicitudAuxilioSeleccionada() {
		return solicitudAuxilioSeleccionada;
	}

	public void setSolicitudAuxilioSeleccionada(SolicitudAuxilio solicitudAuxilioSeleccionada) {
		this.solicitudAuxilioSeleccionada = solicitudAuxilioSeleccionada;
	}
	
	public int getAccion() {
		return accion;
	}

	public void setAccion(int accion) {
		this.accion = accion;
	}
	
	private void cargarDatosPredeterminados() {
		setSolicitudAuxilioVo(new SolicitudAuxilioVO());
		getSolicitudAuxilioVo().setSolicitudAuxilio(new SolicitudAuxilio());
		getSolicitudAuxilioVo().getSolicitudAuxilio().setEstadosauxilio(new EstadoAuxilio());
	}
	
	private void buscar() {
		UsuarioVO usuario = (UsuarioVO) FacesUtils.getSessionAttribute(LoginManagedBean.USER_LOGIN);
		getSolicitudAuxilioVo().getSolicitudAuxilio().setVincedula(usuario.getUsuario().getNombreUsuario());
		
		try {
			listaSolicitudes = solicitudAuxilioBL.buscarMisSolicitudes(getSolicitudAuxilioVo());
			
			if (!(listaSolicitudes != null && !listaSolicitudes.isEmpty())) {
				FacesUtils.addWarnMessage(FacesUtils.getMensaje(MENSAJES_BUNDLE, "sifeap.missolicitudesauxilio.consultar.sinresultado"), false);
			}
		} catch (Exception e) {
			e.printStackTrace();
			try {
				FacesUtils.addErrorMessage(FacesUtils.getMensaje(MENSAJES_BUNDLE, "sifeap.missolicitudesauxilio.consultar.error"), false);
			} catch (SifeapException e1) {}
		}
	}
	
	private void limpiarCampos() {
		cargarDatosPredeterminados();
		buscar();
	}
	
	public void consultar() {
		//Ejecuta la consulta
		buscar();
	}
	
	public String limpiar() {
		limpiarCampos();
		return "/web/solicitudesAuxilio/misSolicitudes.jsf?faces-redirect=true";
	}
	
	public String cargarEditar() {
		//Eliminar managedBean de sesion
		String[] managedBeans = {"consultarSolicitudesAuxilioManagedBean", "solicitudAuxilioManagedBean"};
		MenuUsuarioManagedBean.eliminarManagedBean(managedBeans);
		
		String idSolicitud = FacesUtils.getRequestParameter("p_idsolicitud_edit");
		
		try {
			if (idSolicitud != null) {
				setAccion(SolicitudAuxilioVO.ACCION_MODIFICAR);
				setSolicitudAuxilioSeleccionada(solicitudAuxilioBL.buscar(new Long(idSolicitud)));
			} else {
				return "";
			}
		} catch (Exception e) {
			e.printStackTrace();
			try {
				FacesUtils.addErrorMessage(FacesUtils.getMensaje(MENSAJES_BUNDLE, "sifeap.missolicitudesauxilio.consultar.error"), false);
			} catch (SifeapException e1) {}
			return "";
		}
		
		return "/web/solicitudesAuxilio/solicitudAuxilio.jsf?faces-redirect=true";
	}
	
	public void cargarCancelarSolicitud() {
		String idSolicitud = FacesUtils.getRequestParameter("p_idsolicitud_canc");
		
		try {
			if (idSolicitud != null) {
				setAccion(SolicitudAuxilioVO.ACCION_MODIFICAR);
				setSolicitudAuxilioSeleccionada(solicitudAuxilioBL.buscar(new Long(idSolicitud)));
			}
		} catch (Exception e) {
			e.printStackTrace();
			try {
				FacesUtils.addErrorMessage(FacesUtils.getMensaje(MENSAJES_BUNDLE, "sifeap.missolicitudesauxilio.cancelar.error"), false);
			} catch (SifeapException e1) {}
		}
	}
	
	public void cargarEnviarEstudio() {
		String idSolicitud = FacesUtils.getRequestParameter("p_idsolicitud_env");
		
		try {
			if (idSolicitud != null) {
				setAccion(SolicitudAuxilioVO.ACCION_MODIFICAR);
				setSolicitudAuxilioSeleccionada(solicitudAuxilioBL.buscar(new Long(idSolicitud)));
			}
		} catch (Exception e) {
			e.printStackTrace();
			try {
				FacesUtils.addErrorMessage(FacesUtils.getMensaje(MENSAJES_BUNDLE, "sifeap.missolicitudesauxilio.enviarestudio.error"), false);
			} catch (SifeapException e1) {}
		}
	}
	
	public void cancelarSolicitud() {
		try {
			boolean resultado = solicitudAuxilioBL.cambiarEstadoSolicitud(getSolicitudAuxilioSeleccionada().getIdSolicitudAuxilio(), SolicitudAuxilioVO.ESTADO_AUXILIO_CANCELADO, null);
			
			if (resultado) {
				buscar();
				FacesUtils.addInfoMessage(FacesUtils.getMensaje(MENSAJES_BUNDLE, "sifeap.missolicitudesauxilio.cancelar.exito"), false);
			}
		} catch (SifeapException e) {
			try {
				FacesUtils.addErrorMessage(FacesUtils.getMensaje(MENSAJES_BUNDLE, "sifeap.missolicitudesauxilio.cancelar.error"), false);
			} catch (Exception e1) {}
			e.printStackTrace();
		}
		
	}
	
	public String cancelar(){
		setAccion(SolicitudAuxilioVO.ACCION_CREAR);
		setSolicitudAuxilioSeleccionada(null);
		return "";
	}
	
	public String cargarDetalle() {
		//Eliminar managedBean de sesion
		String[] managedBeans = {"consultarSolicitudesAuxilioManagedBean", "solicitudAuxilioManagedBean"};
		MenuUsuarioManagedBean.eliminarManagedBean(managedBeans);
		
		String idSolicitud = FacesUtils.getRequestParameter("p_idsolicitud_det");
		
		try {
			if (idSolicitud != null) {
				setAccion(SolicitudAuxilioVO.ACCION_DETALLE_MIS_SOLICITUDES);
				setSolicitudAuxilioSeleccionada(solicitudAuxilioBL.buscar(new Long(idSolicitud)));
			} else {
				return "";
			}
		} catch (Exception e) {
			e.printStackTrace();
			try {
				FacesUtils.addErrorMessage(FacesUtils.getMensaje(MENSAJES_BUNDLE, "sifeap.missolicitudesauxilio.consultar.error"), false);
			} catch (SifeapException e1) {}
			return "";
		}
		
		return "/web/solicitudesAuxilio/solicitudAuxilio.jsf?faces-redirect=true";
	}
	
	public void enviarSolicitud() {
		try {
			boolean resultado = solicitudAuxilioBL.cambiarEstadoSolicitud(getSolicitudAuxilioSeleccionada().getIdSolicitudAuxilio(), SolicitudAuxilioVO.ESTADO_AUXILIO_EN_ESTUDIO, null);
			
			if (resultado) {
				buscar();
				FacesUtils.addInfoMessage(FacesUtils.getMensaje(MENSAJES_BUNDLE, "sifeap.missolicitudesauxilio.enviarestudio.exito"), false);
			}
		} catch (SifeapException e) {
			try {
				FacesUtils.addErrorMessage(FacesUtils.getMensaje(MENSAJES_BUNDLE, "sifeap.missolicitudesauxilio.enviarestudio.error"), false);
			} catch (Exception e1) {}
			e.printStackTrace();
		}
		
	}
	
	/**
	 * Verifica si para el usuario autenticado tiene los permisos solicitados
	 * @return
	 */
	public boolean isTienePermisos() {
		return LoginManagedBean.tienePermisos("mis_auxilios:consultar");
	}
}
